↳ Prolog
↳ PrologToPiTRSProof
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_gga(X, 0, Y))
log2_in_gga(0, I, I) → log2_out_gga(0, I, I)
log2_in_gga(s(0), I, I) → log2_out_gga(s(0), I, I)
log2_in_gga(s(s(X)), I, Y) → U2_gga(X, I, Y, half_in_ga(s(s(X)), X1))
half_in_ga(0, 0) → half_out_ga(0, 0)
half_in_ga(s(0), 0) → half_out_ga(s(0), 0)
half_in_ga(s(s(X)), s(Y)) → U4_ga(X, Y, half_in_ga(X, Y))
U4_ga(X, Y, half_out_ga(X, Y)) → half_out_ga(s(s(X)), s(Y))
U2_gga(X, I, Y, half_out_ga(s(s(X)), X1)) → U3_gga(X, I, Y, log2_in_gga(X1, s(I), Y))
U3_gga(X, I, Y, log2_out_gga(X1, s(I), Y)) → log2_out_gga(s(s(X)), I, Y)
U1_ga(X, Y, log2_out_gga(X, 0, Y)) → log2_out_ga(X, Y)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_gga(X, 0, Y))
log2_in_gga(0, I, I) → log2_out_gga(0, I, I)
log2_in_gga(s(0), I, I) → log2_out_gga(s(0), I, I)
log2_in_gga(s(s(X)), I, Y) → U2_gga(X, I, Y, half_in_ga(s(s(X)), X1))
half_in_ga(0, 0) → half_out_ga(0, 0)
half_in_ga(s(0), 0) → half_out_ga(s(0), 0)
half_in_ga(s(s(X)), s(Y)) → U4_ga(X, Y, half_in_ga(X, Y))
U4_ga(X, Y, half_out_ga(X, Y)) → half_out_ga(s(s(X)), s(Y))
U2_gga(X, I, Y, half_out_ga(s(s(X)), X1)) → U3_gga(X, I, Y, log2_in_gga(X1, s(I), Y))
U3_gga(X, I, Y, log2_out_gga(X1, s(I), Y)) → log2_out_gga(s(s(X)), I, Y)
U1_ga(X, Y, log2_out_gga(X, 0, Y)) → log2_out_ga(X, Y)
LOG2_IN_GA(X, Y) → U1_GA(X, Y, log2_in_gga(X, 0, Y))
LOG2_IN_GA(X, Y) → LOG2_IN_GGA(X, 0, Y)
LOG2_IN_GGA(s(s(X)), I, Y) → U2_GGA(X, I, Y, half_in_ga(s(s(X)), X1))
LOG2_IN_GGA(s(s(X)), I, Y) → HALF_IN_GA(s(s(X)), X1)
HALF_IN_GA(s(s(X)), s(Y)) → U4_GA(X, Y, half_in_ga(X, Y))
HALF_IN_GA(s(s(X)), s(Y)) → HALF_IN_GA(X, Y)
U2_GGA(X, I, Y, half_out_ga(s(s(X)), X1)) → U3_GGA(X, I, Y, log2_in_gga(X1, s(I), Y))
U2_GGA(X, I, Y, half_out_ga(s(s(X)), X1)) → LOG2_IN_GGA(X1, s(I), Y)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_gga(X, 0, Y))
log2_in_gga(0, I, I) → log2_out_gga(0, I, I)
log2_in_gga(s(0), I, I) → log2_out_gga(s(0), I, I)
log2_in_gga(s(s(X)), I, Y) → U2_gga(X, I, Y, half_in_ga(s(s(X)), X1))
half_in_ga(0, 0) → half_out_ga(0, 0)
half_in_ga(s(0), 0) → half_out_ga(s(0), 0)
half_in_ga(s(s(X)), s(Y)) → U4_ga(X, Y, half_in_ga(X, Y))
U4_ga(X, Y, half_out_ga(X, Y)) → half_out_ga(s(s(X)), s(Y))
U2_gga(X, I, Y, half_out_ga(s(s(X)), X1)) → U3_gga(X, I, Y, log2_in_gga(X1, s(I), Y))
U3_gga(X, I, Y, log2_out_gga(X1, s(I), Y)) → log2_out_gga(s(s(X)), I, Y)
U1_ga(X, Y, log2_out_gga(X, 0, Y)) → log2_out_ga(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
LOG2_IN_GA(X, Y) → U1_GA(X, Y, log2_in_gga(X, 0, Y))
LOG2_IN_GA(X, Y) → LOG2_IN_GGA(X, 0, Y)
LOG2_IN_GGA(s(s(X)), I, Y) → U2_GGA(X, I, Y, half_in_ga(s(s(X)), X1))
LOG2_IN_GGA(s(s(X)), I, Y) → HALF_IN_GA(s(s(X)), X1)
HALF_IN_GA(s(s(X)), s(Y)) → U4_GA(X, Y, half_in_ga(X, Y))
HALF_IN_GA(s(s(X)), s(Y)) → HALF_IN_GA(X, Y)
U2_GGA(X, I, Y, half_out_ga(s(s(X)), X1)) → U3_GGA(X, I, Y, log2_in_gga(X1, s(I), Y))
U2_GGA(X, I, Y, half_out_ga(s(s(X)), X1)) → LOG2_IN_GGA(X1, s(I), Y)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_gga(X, 0, Y))
log2_in_gga(0, I, I) → log2_out_gga(0, I, I)
log2_in_gga(s(0), I, I) → log2_out_gga(s(0), I, I)
log2_in_gga(s(s(X)), I, Y) → U2_gga(X, I, Y, half_in_ga(s(s(X)), X1))
half_in_ga(0, 0) → half_out_ga(0, 0)
half_in_ga(s(0), 0) → half_out_ga(s(0), 0)
half_in_ga(s(s(X)), s(Y)) → U4_ga(X, Y, half_in_ga(X, Y))
U4_ga(X, Y, half_out_ga(X, Y)) → half_out_ga(s(s(X)), s(Y))
U2_gga(X, I, Y, half_out_ga(s(s(X)), X1)) → U3_gga(X, I, Y, log2_in_gga(X1, s(I), Y))
U3_gga(X, I, Y, log2_out_gga(X1, s(I), Y)) → log2_out_gga(s(s(X)), I, Y)
U1_ga(X, Y, log2_out_gga(X, 0, Y)) → log2_out_ga(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
HALF_IN_GA(s(s(X)), s(Y)) → HALF_IN_GA(X, Y)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_gga(X, 0, Y))
log2_in_gga(0, I, I) → log2_out_gga(0, I, I)
log2_in_gga(s(0), I, I) → log2_out_gga(s(0), I, I)
log2_in_gga(s(s(X)), I, Y) → U2_gga(X, I, Y, half_in_ga(s(s(X)), X1))
half_in_ga(0, 0) → half_out_ga(0, 0)
half_in_ga(s(0), 0) → half_out_ga(s(0), 0)
half_in_ga(s(s(X)), s(Y)) → U4_ga(X, Y, half_in_ga(X, Y))
U4_ga(X, Y, half_out_ga(X, Y)) → half_out_ga(s(s(X)), s(Y))
U2_gga(X, I, Y, half_out_ga(s(s(X)), X1)) → U3_gga(X, I, Y, log2_in_gga(X1, s(I), Y))
U3_gga(X, I, Y, log2_out_gga(X1, s(I), Y)) → log2_out_gga(s(s(X)), I, Y)
U1_ga(X, Y, log2_out_gga(X, 0, Y)) → log2_out_ga(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
HALF_IN_GA(s(s(X)), s(Y)) → HALF_IN_GA(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
HALF_IN_GA(s(s(X))) → HALF_IN_GA(X)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
LOG2_IN_GGA(s(s(X)), I, Y) → U2_GGA(X, I, Y, half_in_ga(s(s(X)), X1))
U2_GGA(X, I, Y, half_out_ga(s(s(X)), X1)) → LOG2_IN_GGA(X1, s(I), Y)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_gga(X, 0, Y))
log2_in_gga(0, I, I) → log2_out_gga(0, I, I)
log2_in_gga(s(0), I, I) → log2_out_gga(s(0), I, I)
log2_in_gga(s(s(X)), I, Y) → U2_gga(X, I, Y, half_in_ga(s(s(X)), X1))
half_in_ga(0, 0) → half_out_ga(0, 0)
half_in_ga(s(0), 0) → half_out_ga(s(0), 0)
half_in_ga(s(s(X)), s(Y)) → U4_ga(X, Y, half_in_ga(X, Y))
U4_ga(X, Y, half_out_ga(X, Y)) → half_out_ga(s(s(X)), s(Y))
U2_gga(X, I, Y, half_out_ga(s(s(X)), X1)) → U3_gga(X, I, Y, log2_in_gga(X1, s(I), Y))
U3_gga(X, I, Y, log2_out_gga(X1, s(I), Y)) → log2_out_gga(s(s(X)), I, Y)
U1_ga(X, Y, log2_out_gga(X, 0, Y)) → log2_out_ga(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
LOG2_IN_GGA(s(s(X)), I, Y) → U2_GGA(X, I, Y, half_in_ga(s(s(X)), X1))
U2_GGA(X, I, Y, half_out_ga(s(s(X)), X1)) → LOG2_IN_GGA(X1, s(I), Y)
half_in_ga(s(s(X)), s(Y)) → U4_ga(X, Y, half_in_ga(X, Y))
U4_ga(X, Y, half_out_ga(X, Y)) → half_out_ga(s(s(X)), s(Y))
half_in_ga(0, 0) → half_out_ga(0, 0)
half_in_ga(s(0), 0) → half_out_ga(s(0), 0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
LOG2_IN_GGA(s(s(X)), I) → U2_GGA(I, half_in_ga(s(s(X))))
U2_GGA(I, half_out_ga(X1)) → LOG2_IN_GGA(X1, s(I))
half_in_ga(s(s(X))) → U4_ga(half_in_ga(X))
U4_ga(half_out_ga(Y)) → half_out_ga(s(Y))
half_in_ga(0) → half_out_ga(0)
half_in_ga(s(0)) → half_out_ga(0)
half_in_ga(x0)
U4_ga(x0)
U2_GGA(I, half_out_ga(X1)) → LOG2_IN_GGA(X1, s(I))
half_in_ga(s(0)) → half_out_ga(0)
POL(0) = 0
POL(LOG2_IN_GGA(x1, x2)) = 2·x1 + x2
POL(U2_GGA(x1, x2)) = 2 + x1 + x2
POL(U4_ga(x1)) = 2 + x1
POL(half_in_ga(x1)) = x1
POL(half_out_ga(x1)) = 2·x1
POL(s(x1)) = 1 + x1
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
LOG2_IN_GGA(s(s(X)), I) → U2_GGA(I, half_in_ga(s(s(X))))
half_in_ga(s(s(X))) → U4_ga(half_in_ga(X))
U4_ga(half_out_ga(Y)) → half_out_ga(s(Y))
half_in_ga(0) → half_out_ga(0)
half_in_ga(x0)
U4_ga(x0)